package ro.upt.ac.cstaicu.instrumentation;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;

import ro.upt.ac.cstaicu.analyze.Entity;

/**
 * 
 * Provides the main services offered by an instrumentor. The technology that is
 * used to instrument the classes could be changed but this interface will not
 * be changed.
 * 
 * @author Cristian-Alexandru STAICU
 * 
 */
public interface Instrumentor {

	/**
	 * It instruments just the desired methods from the class
	 * 
	 * @param className
	 *            - the instrumented class
	 * @param methodName
	 *            - the instrumented method
	 */
	byte[] tracePredicatesFromMethod(String projectClassPath, String className,
			ArrayList<String> desiredMethods);

	/**
	 * It instruments all the methods from the class
	 * 
	 * @param className
	 *            - the instrumented class
	 * 
	 */
	byte[] tracePredicatesFromClass(
			String projectClassPath, String className);
	/**
	 * @return A {@link HashMap} that for each method name it associate a list
	 *
	 *         of predicate ids.
	 */
	Collection<Entity> getTracedPredicates();

}
